package com.forcycle;

import org.junit.Test;

/**
 * @author: wuhao
 * @since: 2021/4/22 20:24
 */
public class ForTest {

    /**
     * 编写程序从1循环到150，并在每行打印一个值，另外在每个3的倍数行
     * 上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印
     * 输出“baz"
     */
    @Test
    public void test1() {
        for (int i = 1; i <= 150; i++) {
            System.out.print(i);
            if (i % 3 == 0) {
                System.out.print("  foo  ");
            }
            if (i % 5 == 0) {
                System.out.print("  biz  ");
            }
            if (i % 7 == 0) {
                System.out.print("  baz  ");
            }
            System.out.println();
        }
    }

    /**
     * 题目：输入两个正整数m和n，求其最大公约数和最小公倍数。
     * 比如：12和20的最大公约数是4，最小公倍数是60。
     * 说明：break关键字的使用
     */
    @Test
    public void test2() {
        int a = 12;
        int b = 20;
    //获取a与b的最大值
        int max = a > b ? a : b;
    //获取a与b的最小值
        int min = a < b ? a : b;
    //求a与b的最大公约数
        for (int i = min; i <=min; i--){
             if (a % i == 0 && b % i == 0){
                 System.out.println(a+"与"+b+"的最大公约数是:"+i);
                 break;
             }
        }
    //求a与b的最小公倍数
        for (int i = 1; i <= a*b ; i++){
            if (i % a == 0 && i % b == 0){
                System.out.println(a+"与"+b+"的最小公倍数是:"+i);
                break;
            }
        }
    }

    /**
     * 1.打印1~100之间所有奇数的和
     */
    @Test
    public void test3() {
         int count = 0;
         for (int i = 1; i <= 100; i++){
             if (i % 2 != 0){
                 count+=i;
             }
         }
        System.out.println("1~100之间所有奇数的和为："+count);
    }

    /**
     * 2.打印1~100之间所有是7的倍数的整数的个数及总和（体会设置计数
     * 器的思想）
     */
    @Test
    public void test4() {
        int count = 0;//记录总和
        int sum = 0; //计数器
        for (int i = 1; i <= 100; i++){
            if (i % 7 == 0){
                count+=i;
                sum++;
            }
        }
        System.out.println("1~100之间所有是7的倍数的整数的个数为:"+sum+","+"总和为:"+count);
    }

    /**
     * 3.输出所有的水仙花数，所谓水仙花数是指一个3位数，其各个位上数
     * 字立方和等于其本身。
     * 例如： 153 = 1*1*1 + 3*3*3 + 5*5*5
     */
    @Test
    public void test5() {
        for (int i = 100 ; i < 1000 ; i++){
            //获取个位数
             int unit = i % 10;
            //获取十位数
             int ten = (i/10) % 10;
            //获取百位数
             int hundred = i / 100;
            //代入水仙花数的公式，满足打印输出：
            if (i == ((unit * unit * unit)+(ten * ten * ten)+(hundred * hundred * hundred))){
                System.out.println("水仙花数有:"+i);
            }
        }
    }
}
